package com.mallcai.bigdata.ladon.service.report.impl.handler.support.rule;

import com.mallcai.bigdata.ladon.dpl.vo.DataType;

/**
 * @author feixy
 * @version 1.0
 * @date 2019-07-20 18:45
 */
public interface IRuleOperator {

    DataType[] STRING_DATA_TYPE = new DataType[]{DataType.STRING};

    DataType[] NUMBER_DATA_TYPE = new DataType[]{DataType.INTEGER, DataType.DOUBLE, DataType.FLOAT, DataType.LONG};

    DataType[] DATE_DATA_TYPE = new DataType[]{DataType.DATE, DataType.DATETIME, DataType.TIMESTAMP};

    DataType[] ALL_DATA_TYPE = DataType.values();

    /**
     * 测试是否满足条件
     * @return
     */
    boolean test(Object obj1, Object obj2);

    /**
     * 是否支持指定的操作符
     * @param op
     * @return
     */
    default boolean support(String op, DataType dataType){
        boolean isMatch = false;
        for (String command: getCommands()){
            if (command.equalsIgnoreCase(op)){
                isMatch = true;
                break;
            }
        }
        if (!isMatch){
            return false;
        }
        isMatch = false;
        for (DataType dt: getSupportDataTypes()){
            if (dt == dataType){
                isMatch = true;
                break;
            }
        }
        return isMatch;
    }


    /**
     * 匹配当前规则的指令
     * @return
     */
    String[] getCommands();

    /**
     * 支持的数据类型
     */
    DataType[] getSupportDataTypes();

}
